package com.itheima.thread.pool.demo02;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * 创建一个具有单个线程的线程池，但是这个线程池可以对任务进行定时执行或者周期性执行
 */
public class ThreadPoolDemo04 {

    public static void main(String[] args) {

        // 1. 获取线程池： ScheduledExecutorService newSingleThreadScheduledExecutor(): 初始化一个具有一个线程的线程池，支持定时及周期性任务执行
        ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();

        // 2. 提交任务
//        for(int x = 0 ; x < 100 ; x++) {
//            executorService.submit( () -> System.out.println(Thread.currentThread().getName() + "------任务执行了....") ) ;
//        }

        // 定时执行
        /**
         * public ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit);
         * command:     要执行的任务类
         * delay：      延迟的时间
         * TimeUnit：   时间单位
         */
        // executorService.schedule(() -> System.out.println(Thread.currentThread().getName() + "------任务执行了....") , 5 , TimeUnit.SECONDS);

        // 周期性执行
        /**
         * public ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
         * command: 要执行的任务类
         * initialDelay: 指定第一次执行这个任务所需要的延迟时间
         * period：  周期性执行这个任务所需要的时间间隔
         * TimeUnit：   时间单位
         */
        executorService.scheduleAtFixedRate(() -> System.out.println(Thread.currentThread().getName() + "------任务执行了....") ,
                10 , 2 , TimeUnit.SECONDS) ;        // 当线程池启动以后，10s之后第一次这个任务，然后每隔2秒执行一次

        // 3. 关闭线程池
        // executorService.shutdown();

    }

}
